home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume91 / games / draughts / part01
Encoding:
Internet Message Format  |  1991-05-18  |  24.8 KB

  1. Path: news.larc.nasa.gov!amiga-request
  2. From: amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator)
  3. Subject: v91i115: Draughts - Draughts game, Part01/01
  4. Reply-To: RWALLACE%vax1.tcd.ie@CUNYVM.CUNY.EDU
  5. Newsgroups: comp.sources.amiga
  6. Message-ID: <comp.sources.amiga:v91i115@ab20.larc.nasa.gov>
  7. Date: 18 May 91 02:12:29 GMT
  8. Approved: tadguy@uunet.UU.NET (Tad Guy)
  9. X-Mail-Submissions-To: amiga@uunet.uu.net
  10. X-Post-Discussions-To: comp.sys.amiga.misc
  11.  
  12. Submitted-by: RWALLACE%vax1.tcd.ie@CUNYVM.CUNY.EDU
  13. Posting-number: Volume 91, Issue 115
  14. Archive-name: games/draughts/part01
  15.  
  16. [ includes uuencoded executable  ...tad ]
  17.  
  18. Run from operating system prompt by typing "draughts <ply>"
  19. where <ply> is the number of half-moves you want the program to look ahead.
  20. The higher the number the better the quality of the game but the slower the
  21. program will play. 3 or 4 is probably about the limit for most people's
  22. patience, but you could use higher numbers for batch-mode play. The program
  23. always takes first move (it plays black, you play white). It will display
  24. the board on the screen and the cursor below that. You can then type your
  25. move by typing the coordinates of the start and finish squares, row first
  26. e.g. one possible starting move is 5140. Note that you must type the 4 digits
  27. with no spaces or anything between them, exactly as shown. Also when taking
  28. one of the computer's pieces, the destination square is on top of the enemy
  29. piece not beyond it even though your piece will actually be jumping over the
  30. enemy piece. Press CTRL-C to stop the program.
  31.  
  32. Exceptions to the standard rules of draughts are:
  33. - No repeat taking in one move
  34. - You don't have to take an enemy piece if the opportunity arises
  35. - If one side can make no legal move, the game does not end
  36.  
  37. #!/bin/sh
  38. # This is a shell archive.  Remove anything before this line, then unpack
  39. # it by saving it into a file and typing "sh file".  To overwrite existing
  40. # files, type "sh file -c".  You can also feed this as standard input via
  41. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  42. # will see the following message at the end:
  43. #        "End of archive 1 (of 1)."
  44. # Contents:  draughts.c draughts.uu
  45. # Wrapped by tadguy@ab20 on Fri May 17 22:12:07 1991
  46. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  47. if test -f 'draughts.c' -a "${1}" != "-c" ; then 
  48.   echo shar: Will not clobber existing file \"'draughts.c'\"
  49. else
  50. echo shar: Extracting \"'draughts.c'\" \(7553 characters\)
  51. sed "s/^X//" >'draughts.c' <<'END_OF_FILE'
  52. X/*
  53. XDraughts game by Russell Wallace 29 September 1990
  54. XStandard ANSI C so it should compile on any system
  55. XUses Alpha-Beta minimax algorithm
  56. X
  57. XRun from operating system prompt by typing "draughts <ply>"
  58. Xwhere <ply> is the number of half-moves you want the program to look ahead.
  59. XThe higher the number the better the quality of the game but the slower the
  60. Xprogram will play. 3 or 4 is probably about the limit for most people's
  61. Xpatience, but you could use higher numbers for batch-mode play. The program
  62. Xalways takes first move (it plays black, you play white). It will display
  63. Xthe board on the screen and the cursor below that. You can then type your
  64. Xmove by typing the coordinates of the start and finish squares, row first
  65. Xe.g. one possible starting move is 5140. Note that you must type the 4 digits
  66. Xwith no spaces or anything between them, exactly as shown. Also when taking
  67. Xone of the computer's pieces, the destination square is on top of the enemy
  68. Xpiece not beyond it even though your piece will actually be jumping over the
  69. Xenemy piece. Press CTRL-C to stop the program.
  70. X
  71. XExceptions to the standard rules of draughts are:
  72. X- No repeat taking in one move
  73. X- You don't have to take an enemy piece if the opportunity arises
  74. X- If one side can make no legal move, the game does not end
  75. X
  76. XThis code is in the public domain.
  77. X*/
  78. X
  79. X#include    <stdio.h>
  80. X#include    <limits.h>
  81. X#include    <string.h>
  82. X#include    <stdlib.h>
  83. X
  84. Xtypedef struct
  85. X{
  86. X    int p[8][8];
  87. X} board;
  88. X
  89. Xtypedef struct
  90. X{
  91. X    int i,j,dir;
  92. X} trackMove;
  93. X
  94. X#define    TRUE        1
  95. X#define    FALSE        0
  96. X
  97. Xboard startboard =
  98. X{
  99. X    1,0,1,0,1,0,1,0,
  100. X    0,1,0,1,0,1,0,1,
  101. X    1,0,1,0,1,0,1,0,
  102. X    0,0,0,0,0,0,0,0,
  103. X    0,0,0,0,0,0,0,0,
  104. X    0,-1,0,-1,0,-1,0,-1,
  105. X    -1,0,-1,0,-1,0,-1,0,
  106. X    0,-1,0,-1,0,-1,0,-1,
  107. X};
  108. X
  109. Xint ply;
  110. X
  111. Xisvalidmove (board *move)
  112. X{
  113. X    return (move->p[0][0] != INT_MIN);
  114. X}
  115. X
  116. Xvoid inctrackmove (trackMove *trackmove)
  117. X{
  118. X    trackmove->dir = 0;
  119. X    trackmove->j += 2;
  120. X    if (trackmove->j >= 8)
  121. X    {
  122. X        if (trackmove->j == 8)
  123. X            trackmove->j = 1;
  124. X        else
  125. X            trackmove->j = 0;
  126. X        trackmove->i++;
  127. X    }
  128. X}
  129. X
  130. Xsign (int x)
  131. X{
  132. X    if (x < 0)
  133. X        return -1;
  134. X    if (x > 0)
  135. X        return 1;
  136. X    return 0;
  137. X}
  138. X
  139. Xmakemove (int i,int j,int di,int dj,board *move)
  140. X{
  141. X    if (i+di < 0 || i+di > 7 || j+dj < 0 || j+dj > 7)
  142. X        return TRUE;
  143. X    if (sign (move->p[i][j]) == sign (move->p[i+di][j+dj]))
  144. X        return TRUE;
  145. X    if (move->p[i+di][j+dj] == 0)
  146. X    {
  147. X        if (move->p[i][j] == 1 && i+di == 7)
  148. X            move->p[i][j] = 2;
  149. X        if (move->p[i][j] == -1 && i+di == 0)
  150. X            move->p[i][j] = -2;
  151. X        move->p[i+di][j+dj] = move->p[i][j];
  152. X        move->p[i][j] = 0;
  153. X        return FALSE;
  154. X    }
  155. X    if (i+di+di < 0 || i+di+di > 7 || j+dj+dj < 0 || j+dj+dj > 7)
  156. X        return TRUE;
  157. X    if (move->p[i+di+di][j+dj+dj] != 0)
  158. X        return TRUE;
  159. X    if (move->p[i][j] == 1 && i+di+di == 7)
  160. X        move->p[i][j] = 2;
  161. X    if (move->p[i][j] == -1 && i+di+di == 0)
  162. X        move->p[i][j] = -2;
  163. X    move->p[i+di][j+dj] = 0;
  164. X    move->p[i+di+di][j+dj+dj] = move->p[i][j];
  165. X    move->p[i][j] = 0;
  166. X    return FALSE;
  167. X}
  168. X
  169. Xvoid findnextmove (board *pos,board *move,trackMove *trackmove,int minimize)
  170. X{
  171. X    int i,j;
  172. X    static di[] = { 1,1,-1,-1 };
  173. X    static dj[] = { -1,1,-1,1 };
  174. X    *move = *pos;
  175. XBIGLOOP:
  176. X    if (trackmove->i >= 8)
  177. X    {
  178. X        move->p[0][0] = INT_MIN;
  179. X        return;
  180. X    }
  181. XLOOP:
  182. X    i = trackmove->i;
  183. X    j = trackmove->j;
  184. X    switch (pos->p[i][j])
  185. X    {
  186. X        case -2:
  187. X            if (!minimize)
  188. X                goto INCMOVE;
  189. X            if (makemove (i,j,di[trackmove->dir],dj[trackmove->dir],move))
  190. X                goto NEXT;
  191. X            goto FINISH;
  192. X        case -1:
  193. X            if (!minimize)
  194. X                goto INCMOVE;
  195. X            if (trackmove->dir < 2)
  196. X                trackmove->dir = 2;
  197. X            if (makemove (i,j,di[trackmove->dir],dj[trackmove->dir],move))
  198. X                goto NEXT;
  199. X            goto FINISH;
  200. X        case 1:
  201. X            if (minimize || trackmove->dir > 1)
  202. X                goto INCMOVE;
  203. X            if (makemove (i,j,di[trackmove->dir],dj[trackmove->dir],move))
  204. X                goto NEXT;
  205. X            goto FINISH;
  206. X        case 2:
  207. X            if (minimize)
  208. X                goto INCMOVE;
  209. X            if (makemove (i,j,di[trackmove->dir],dj[trackmove->dir],move))
  210. X                goto NEXT;
  211. X            goto FINISH;
  212. X    }
  213. XINCMOVE:
  214. X    inctrackmove (trackmove);
  215. X    goto BIGLOOP;
  216. XNEXT:
  217. X    trackmove->dir++;
  218. X    if (trackmove->dir > 3)
  219. X        goto INCMOVE;
  220. X    goto LOOP;
  221. XFINISH:
  222. X    trackmove->dir++;
  223. X    if (trackmove->dir > 3)
  224. X        inctrackmove (trackmove);
  225. X}
  226. X
  227. Xvoid findfirstmove (board *pos,board *move,trackMove *trackmove,int minimize)
  228. X{
  229. X    trackmove->i = trackmove->j = trackmove->dir = 0;
  230. X    findnextmove (pos,move,trackmove,minimize);
  231. X}
  232. X
  233. Xminimax (board *pos,int level,int alpha,int beta)
  234. X{
  235. X    board move;
  236. X    trackMove trackmove;
  237. X    if (level == ply)
  238. X    {
  239. X        int i,j;
  240. X        int value = 0;
  241. X        for (i=0 ; i<8 ; i++)
  242. X            for (j=0 ; j<8 ; j++)
  243. X                value += pos->p[i][j];
  244. X        return value;
  245. X    }
  246. X    findfirstmove (pos,&move,&trackmove,level & 1);
  247. X    if (level & 1)        /* Minimizing level */
  248. X    {
  249. X        while (alpha < beta && isvalidmove (&move))
  250. X        {
  251. X            int temp = minimax (&move,level+1,alpha,beta);
  252. X            if (temp < beta)
  253. X                beta = temp;
  254. X            findnextmove (pos,&move,&trackmove,TRUE);
  255. X        }
  256. X        return beta;
  257. X    }
  258. X    else                    /* Maximizing level */
  259. X    {
  260. X        while (alpha < beta && isvalidmove (&move))
  261. X        {
  262. X            int temp = minimax (&move,level+1,alpha,beta);
  263. X            if (temp > alpha)
  264. X                alpha = temp;
  265. X            findnextmove (pos,&move,&trackmove,FALSE);
  266. X        }
  267. X        return alpha;
  268. X    }
  269. X}
  270. X
  271. Xvoid printboard (board *pos)
  272. X{
  273. X    int i,j;
  274. X    printf ("\n 01234567\n");
  275. X    for (i=0 ; i<8 ; i++)
  276. X    {
  277. X        printf ("%c",i + '0');
  278. X        for (j=0 ; j<8 ; j++)
  279. X        {
  280. X            switch (pos->p[i][j])
  281. X            {
  282. X                case -2:
  283. X                    printf ("W");
  284. X                    break;
  285. X                case -1:
  286. X                    printf ("w");
  287. X                    break;
  288. X                case 0:
  289. X                    if ((i + j) & 1)
  290. X                        printf (" ");
  291. X                    else
  292. X                        printf (".");
  293. X                    break;
  294. X                case 1:
  295. X                    printf ("b");
  296. X                    break;
  297. X                case 2:
  298. X                    printf ("B");
  299. X                    break;
  300. X            }
  301. X        }
  302. X        printf ("\n");
  303. X    }
  304. X    printf ("\n");
  305. X}
  306. X
  307. Xmain (int argc,char **argv)
  308. X{
  309. X    int i,j,newi,newj,di,dj;
  310. X    static char buf[256];
  311. X    static board move;
  312. X    static board bestmove;
  313. X    static trackMove trackmove;
  314. X    static board pos;
  315. X    int alpha;
  316. X    printf ("Draughts by Russell Wallace  " __DATE__ "\n"
  317. X                "See source code for details\n");
  318. X    if (argc != 2 || argv[1][0] == '?')
  319. X        return 1;
  320. X    ply = atoi (argv[1]);
  321. X    for (;;)
  322. X    {
  323. X        pos = startboard;
  324. X        for (;;)
  325. X        {
  326. X            alpha = INT_MIN;
  327. X            newi = newj = FALSE;
  328. X            for (i=0 ; i<8 ; i++)
  329. X                for (j=0 ; j<8 ; j++)
  330. X                {
  331. X                    if (pos.p[i][j] < 0)
  332. X                        newi = TRUE;
  333. X                    if (pos.p[i][j] > 0)
  334. X                        newj = TRUE;
  335. X                }
  336. X            if (!newi)
  337. X            {
  338. X                printf ("I win\n");
  339. X                break;
  340. X            }
  341. X            if (!newj)
  342. X            {
  343. X                printf ("You win\n");
  344. X                break;
  345. X            }
  346. X            bestmove = pos;
  347. X            findfirstmove (&pos,&move,&trackmove,FALSE);
  348. X            while (isvalidmove (&move))
  349. X            {
  350. X                int newalpha = minimax (&move,1,alpha,INT_MAX);
  351. X                if (newalpha > alpha)
  352. X                {
  353. X                    alpha = newalpha;
  354. X                    bestmove = move;
  355. X                }
  356. X                findnextmove (&pos,&move,&trackmove,FALSE);
  357. X            }
  358. X            pos = bestmove;
  359. X            printboard (&pos);
  360. XGET_MOVE:
  361. X            gets (buf);
  362. X            if (strlen (buf) != 4)
  363. X                goto ILLEGAL_MOVE;
  364. X            i = buf[0] - '0';
  365. X            j = buf[1] - '0';
  366. X            newi = buf[2] - '0';    
  367. X            newj = buf[3] - '0';
  368. X            if (    i < 0 || i > 7 || newi < 0 || newi > 7 ||
  369. X                    j < 0 || j > 7 || newj < 0 || newj > 7)
  370. X                goto ILLEGAL_MOVE;
  371. X            if ((i-newi != 1 && i-newi != -1) || (j-newj != 1 && j-newj != -1))
  372. X                goto ILLEGAL_MOVE;
  373. X            if (pos.p[i][j] >= 0)
  374. X                goto ILLEGAL_MOVE;
  375. X            if (pos.p[newi][newj] < 0)
  376. X                goto ILLEGAL_MOVE;
  377. X            if (pos.p[newi][newj] == 0)
  378. X            {
  379. X                if (newi == 0)
  380. X                    pos.p[i][j] = -2;
  381. X                pos.p[newi][newj] = pos.p[i][j];
  382. X                pos.p[i][j] = 0;
  383. X            }
  384. X            else
  385. X            {
  386. X                di = newi - i;
  387. X                dj = newj - j;
  388. X                if (newi+di < 0 || newi+di > 7 || newj+dj < 0 || newj+dj > 7)
  389. X                    goto ILLEGAL_MOVE;
  390. X                if (pos.p[newi+di][newj+dj] != 0)
  391. X                    goto ILLEGAL_MOVE;
  392. X                if (newi+di == 0)
  393. X                    pos.p[i][j] = -2;
  394. X                pos.p[newi+di][newj+dj] = pos.p[i][j];
  395. X                pos.p[newi][newj] = 0;
  396. X                pos.p[i][j] = 0;
  397. X            }
  398. X        }
  399. X    }
  400. XILLEGAL_MOVE:
  401. X    printf ("Illegal move\n");
  402. X    goto GET_MOVE;
  403. X}
  404. END_OF_FILE
  405. if test 7553 -ne `wc -c <'draughts.c'`; then
  406.     echo shar: \"'draughts.c'\" unpacked with wrong size!
  407. fi
  408. # end of 'draughts.c'
  409. fi
  410. if test -f 'draughts.uu' -a "${1}" != "-c" ; then 
  411.   echo shar: Will not clobber existing file \"'draughts.uu'\"
  412. else
  413. echo shar: Extracting \"'draughts.uu'\" \(13612 characters\)
  414. sed "s/^X//" >'draughts.uu' <<'END_OF_FILE'
  415. Xbegin 644 draughts
  416. XM```#\P`````````#``````````(```7J```"C0```F\```/I```%ZDCG?OXD4
  417. XM2"0`2?D`````+'@`!$?Y```#/'(`(#P```&@8`(FP5'(__PI3P-\*4X#=$*LT
  418. XM`WAP`"(\```P`$ZN_LY#^@&4<`!.KOW8*4`)N&8&<&1@``$F)FX!%"EK`)@#=
  419. XM<$JK`*QG``"2(`^0KP`X!H````"`*4`#0"!K`*S1R-'((F@`$-/)T\D@`G(`Q
  420. XM$ADI20.$T(%>@`)`__PI0`.,2.=`0"(\``$``4ZN_SI*@&8,(#P```/H+P!GE
  421. XM``$0($`I0`.(3-\"`B`"4X#4@1&R```@`E."4<C_]A&\`"`@`E."$;P`(B`";
  422. XM$;$@`"`!4<K_^!"\`"(O"&!R*6L`.@-`<']2@-&L`T!!ZP!<3J[^@$'K`%Q.V
  423. XMKOZ,*4`#>"\`)$`@*@`D9Q(L;`FX($`B*```*4$#<$ZN_X(B*@`@9QHD/````
  424. XM`^U.KO_B*4`#@&<*Y8@@0"=H``@`I"!L`W@O"$AL`SP@:``D*6@`!`.$3KH`S
  425. XML$ZZ`'QP`&`$("\`!"\`("P#:&<$($!.D$ZZ`%PL>``$(FP)N$ZN_F).N@"&O
  426. XM2JP#>&<<(BP#@&<$3J[_W"QX``1.KO]\(FP#>$ZN_H9@#B`L`XQG"")L`XA..
  427. XMKO\N(!\N;`-\3-]_?DYU9&]S+FQI8G)A<GD```!@``\"3G$``"!O``1@``3*X
  428. XM3G$``$CG,#(L;P`H)&\`&"9O`!PD+P`@)B\`)$ZN_J1,WTP,3G4``$YU3G5(-
  429. XMYP<P+@`F2"P!(`=.NA3*)$`@"F8$</]@,`@J``,``V<.2'@``B`'<@!.N@[,5
  430. XM6$\@*@`$(@8@2TZZ$,HJ`$JL`U1G!'#_8`(@!4S?#.!.=0```````'!A2.<#?
  431. XM$"9O`!`@2TH89OQ3B)'++`A^`!X;2H=G+%.L`69M$B!L`5Y2K`%>(`<0@'(``
  432. XM$@!@X"`'<@`2`"`!0>P!6DZZ!KHB`&#,</]![`%:3KH&K"`&3-\(P$YU````)
  433. XM``````!P84Y5_\!(YR<P)D@D27X`?`!Z`'``&WP`(/_[<@`K0?_V=/\K0O_R-
  434. XM0>W_T!M`__$;0/_\*T'_Y"M!_^@K2/_,$!-G+'(`$@`$00`@9Q1706<444%GD
  435. XM"%5!9A9^`6`.?`%@"GH!8`8;?``!__Q2BV#0$!-R,+`!9@92BQM!__MP*K`3A
  436. XM9@P@4EB2*U#_]E*+8`P@2T/M__9.N@MVU\`0$W(NL`%F(%*+<"JP$V8,(%)8G
  437. XMDBM0__)2BV`,($M#[?_R3KH+3M?`$!-R;+`!9@H;?``!__%2BV`(<FBP`68"M
  438. XM4HL0&W(`$@`;0/_P!$$`4&<``69106<``70$00`+9P`!^E-!9R0$00`+9P`!P
  439. XM#%-!9P`!1E=!9P`!JE5!9P``WE=!9P`!2&```>A*+?_Q9P@@4EB2(!!@!B!2>
  440. XM6)(@$"M`_^QL"G(!1*W_["M!_^@@+?_H9P1R+6`*2@9G!'(K8`)R(!M!_]!R9
  441. XM`!(&@(%R`!(%@(%G"%*M_\Q2K?_D("W_["!M_\Q.N@H(*T#_R"`M__)*@&H&2
  442. XM<@$K0?_R("W_R"(M__*2@$CM``+_Q&\T(&W_S-'!+T@`&"!M_\PB;P`83KH,A
  443. XM-G``$"W_^R(M_\0@;?_,8`(0P%.!9/H@+?_R*T#_R-&M_^1![?_0*TC_S$H'(
  444. XM9P`!)!M\`"#_^V```1I*+?_Q9P@@4EB2(!!@!B!26)(@$"M`_^Q@`/]F2BW_=
  445. XM\6<((%)8DB`08`8@4EB2(!`K0/_L2BW__&<2(&W_S!#\`#!R`2M!_^0K2/_,S
  446. XM(&W_S$ZZ"6@K0/_(8`#_-B`M__)*@&H&<`@K0/_R&WP``?_Q2BW_\6<((%)8,
  447. XMDB`08`8@4EB2(!`K0/_L2BW__&<6(&W_S!#\`#`0_`!X<@(K0?_D*TC_S"!M?
  448. XM_\Q.N@E(*T#_R`@M``7_\&<`_MA![?_03KH('F``_LP@4EB2(E`K2?_,9@A!-
  449. XM^@#&*TC_S"!M_\Q*&&;\4XB1[?_,*TC_Y"`M__)*@&LDL<!O("M`_^1@&G`!D
  450. XM*T#_Y"!26)(@$!M`_]!"+?_18`1P`&!Z("W_Y"(M__:R@&P(=``K0O_V8`216
  451. XMK?_V2@=G+E.M_^1M%'``(&W_S!`8*TC_S"!M``A.D&#F4ZW_]FT\<``0+?_[8
  452. XM(&T`"$Z08.Q3K?_V;0YP`!`M__L@;0`(3I!@[%.M_^1M%'``(&W_S!`8*TC_;
  453. XMS"!M``A.D&#F(`M,WPSD3EU.=0``3E7_]$CG`3`F2"1)*VT`"/_V'AI*!V<N]
  454. XM<"6^`&8@L!)F!%**8!@O"R!*0^W_]F$`_#Y83RM`__IG!"1`8-1P`!`'3I-@3
  455. XMS$S?#(!.74YU3E7_Z$CG(3(F2`RL````(`D:;```TA`3<B"P`6<,<@FP`6<&6
  456. XM<@JP`68$4HM@Z!`39P``M"(L"1KE@5*L"1I![`DBT<$D2'(BL`%F<E*+($LD1
  457. XMB"M(_^P0$W(BL`%G4'(JL`%F/E*+<``0$P1``$5G"`1```EG$&`<(&W_[!#\B
  458. XM`!<K2/_L8!@@;?_L$/P`"BM(_^Q@"B!M_^P0TRM(_^Q2BV"T(&W_[!#;*TC_"
  459. XM[&"H4HL@;?_L0A@K2/_L8`#_3B2+$!-G%G(@L`%G$'()L`%G"G(*L`%G!%*+)
  460. XM8.9*$V8"8`9"&V``_R8@+`D:9@8@;`-X8`1![`DB*4@)'DJ`9@``@$/Z`21-H
  461. XM[`C@+-DLV2S9+-D\D2)L`W@@:0`D+T@`%'`H0>P(X")O`!0B:0`$3KH&!D'L8
  462. XM".`B""0\```#[BQL";A.KO_B*4`'I"E`!ZQR$"E!!Z@I0`>T*4$'L.6`*T#_X
  463. XM\)/)+'@`!$ZN_MH@;?_P(D`C:``(`*1^`"M`__1@*BQL";A.KO_**4`'I$ZNQ
  464. XM_\0I0`>L0?H`I"(()#P```/M3J[_XBE`![1^$"`'`$"``8&L!Z`@!P!`@`*!M
  465. XMK`>H`*P``(`#![!*K`&@9P1P`&`&(#P``(``+@!"K`%4(`<`0``!*4`!4'`!Y
  466. XM*4`!=B`'`$```BE``7)P`BE``9@@!P!``(`I0`&40?H-#BE(`VP@+`D:(&P)X
  467. XM'DZZ`#YP`$ZZ"@!,WTR$3EU.=6-O;CHQ,"\Q,"\S,C`O.#`O`"H`````````N
  468. XM``````````````````````````!.^0``!N8````````O"R9(2JL`%&<,""L`*
  469. XM`P`;9@1P`&`R("P#.$ZZ".0G0``$)T``$&8*<`PI0`FT</]@%B=L`S@`%'#SC
  470. XMP:L`&'``)T``#"=```@F7TYU````````````````3E7_[$CG+Q`N`"9(*`=P5
  471. XM,<"K`!AG!G#_8``"1@@K``<`&E;`1`!(@$C`+`!*JP`49GH(*P`"`!MF<G``C
  472. XM)T``#'+_OH%G``(:($M.NO]<2H!G#`CK``4`&W#_8``"!`CK``$`&TH&9PX@-
  473. XM*P`4(@!$@2=!``Q@""`K`!0G0``,4ZL`#&T2(&L`!%*K``0@!Q"`<@`2`&`08
  474. XM(`=R`!(`(`$@2V$`_UXB`"`!8``!M@@K``(`&V=0</^^@&8&<`!@``&B(`<;D
  475. XM0/__2@9G'G`*OH!F&'`"*T#_\"(K`!Q!^@&,P4%.NO?**@!@%G`!*T#_\"(K)
  476. XM`!Q![?__P4%.NO>R*@!^_V```,X(ZP`!`!M*!F=*</^^@&=$5*L`#'(*OH%FD
  477. XM'B!K``12JP`$$+P`#2(K``Q*@6L&($MA`/[*4JL`#"!K``12JP`$(`<0@"`K+
  478. XM``Q*@&H&(`=@``$,?O\@*P`$D*L`$"M`__!G:`@K``8`&F=,2'@``B`K`!QR[
  479. XM`$ZZ!BI83RM`_^Q*!F<T4ZW_[&TN0J<@*P`<(BW_[$ZZ!@P@*P`<<@%![?_].
  480. XM3KH%#EA/2JP#5&8*$"W__7(:L`%GS"`K`!PB+?_P(&L`$$ZZ]N0J`&`">@!P`
  481. XM_[J`9@@(ZP`%`!M@#+JM__!G!@CK``0`&TH&9PXB*P`4)`%$@B="``Q@&`@KL
  482. XM``(`&V<(<@`G00`,8`@B*P`4)T$`#"!K`!`G2``$OH!G*%.K``QM$B!K``12T
  483. XMJP`$(`<0@'(`$@!@$"`'<@`2`"`!($MA`/V\(@!P,,"K`!AG!'#_8`QP_[B`=
  484. XM9@1P`&`"(`1,WPCT3EU.=0T*``!(YP<0)D@(*P`'`!I6P$0`2(!(P"X`<##`,
  485. XMJP`89PI"JP`(</]@``$X""L`!P`;9Q`(*P`&`!MG"'#_($M.NOU62JL`%&8R6
  486. XM0JL`"`@K``(`&V<0<`$G0``40>L`("=(`!!@<B!+3KK\UDJ`9V@(ZP`%`!MPF
  487. XM_V```.A*!V=85*L`""`K``AN3B!K``12JP`$?``<$"`&<@V0@6<(<@V0@6<BC
  488. XM8"Q3JP`(;1`@:P`$4JL`!'``$!!@``"H($MA`/]$8```G@CK``0`&W#_8```E
  489. XMDB`&8```C`@K``$`&V9*".L````;("L`'"(K`!0@:P`03KH#6"H`2H5J!@CK3
  490. XM``4`&TJ%9@8(ZP`$`!M*A6\:2@=G"B`%1(`G0``(8`0G10`((&L`$"=(``1PU
  491. XM,L"K`!AG%DH'9PAP_R=```A@!G``)T``"'#_8!I3JP`(;0X@:P`$4JL`!'``_
  492. XM$!!@!B!+80#^I$S?".!.=4CG!P`N`"`L`2!3@"P`2D9K+B`&2,#G@$'L!Z`J6
  493. XM,`@`2@5G&`@%``1F$B`&2,#G@$'L!Z`@,`@$3KH&GE-&8,X@!TZZ\_),WP#@F
  494. XM3G4```````!P82YL`WQ.N@:B<!1.N@4T``````````!P84CG(#`F2"1+$!)G8
  495. XM)'(`$@!![`(U"#```1@`9PIR`!(`=""2@F`$<@`2`!2!4HI@V"`+3-\,!$YUT
  496. XM````````<&%.5?_X2.<#,"9()$DN`"!*2AAF_%.(D<HL""!+2AAF_%.(D<L@T
  497. XM"")+T\`K2?_XO(=C`BP'(`8@2F`"$MA3@&3Z(&W_^$(P:``@"TS?#,!.74YU)
  498. XM```O"R9(<``0$T'L`C4(,``#"`!G!%*+8.P@"R9?3G4``$Y5__0B3W(*3KH&Z
  499. XMT`9!`#`2P4J`9O`@"1#AO\EF^D(0D(].74YU``!.5?_T(D\B``)!``<&00`P%
  500. XM$L'FB&;P(`D0X;_)9OI"$)"/3EU.=0``,#$R,S0U-C<X.6%B8V1E9E%/(D\R=
  501. XM``)!``\2^Q#DZ(AF\B`)(@\0X;*)9OI"$)"!4$].=2\)(DAR`'``+P(,$``K"
  502. XM9P8,$``M9@)22!`8!```,&T2#```"6X,)`'E@=*"TH'2@&#F#!$`+68"1($D'
  503. XM'R`(4X`@7R"!D(E.=4Y5_^1(YP$R+@`K2/_D2H=N!G#_8```TG`(OH!D`BX`R
  504. XM(`=6@"X``D?__"1M_^0@+?_DT(??K`$T0>P!,"90*T#_\"M(__0@"V<``)`@`
  505. XM2R`K``31P$CM`0#_[")M__"WR6,0)(LE1P`$+&W_]"R*<`!@=K?)9AHL4R2.5
  506. XM("L`!"(`TH<E00`$+&W_]"R*<`!@6+7(9`B?K`$T</]@3+7(9BH@$V<,L\!CK
  507. XM")^L`31P_V`XWZL`!"`39PZSP&8*("D`!-&K``0FD7``8!XK2__T*VW_[/_HM
  508. XM)E-@`/]N(&W_]""*0I(E1P`$<`!,WTR`3EU.=0```````'!A2.<',"X`)D@L(
  509. XM`2`'3KH&PB1`(`IF!'#_8!H@*@`$(@8@2TZZ`XPJ`$JL`U1G!'#_8`(@!4S?4
  510. XM#.!.=0``+P<N`%*L":13K`%F;1(@;`%>4JP!7B`'$(!R`!(`8!(@!W(`$@`@C
  511. XM`4'L`5I.NOCB(@`N'TYU3E4``"\+)FT`"$*L":1(;0`,0?K_MB)+3KKUNG#_T
  512. XM0>P!6DZZ^+8@+`FD)FW__$Y=3G5*@&\6L\AE#-'`T\`3(%.`9OI.=1+84X!F>
  513. XM^DYU2.<`,B9L":@@"V<4)%,B2R`I``@L>``$3J[_+B9*8.B1R"E(":PI2`FHF
  514. XM3-],`$YU2.</$"X`+`$J+P`8(`=.N@70)D`@"V8$</]@'"\%("L`!"(&3KH"S
  515. XM*EA/*`!*K`-49P1P_V`"(`1,WPCP3G4``````````'!A2.<!,BX`<`S>@"`'N
  516. XM<@`L>``$3J[_.B9`(`MF!'``8#@G1P`(1>P)J"!J``0G2``$D<@FB$J29@(D:
  517. XMBR`J``1G!")`(HLE2P`$2JP!)&8$*4L!)$'K``P@"$S?3(!.=0``````````_
  518. XM````````2.<!,"9()$M3K`%`;0YP`"!L`3P0&"E(`3Q@"$'L`3A.NOGR+@!PF
  519. XM_[Z`9Q)P"KZ`9@9"&R`*8!(@!Q;`8,JURV8$<`!@!$(;(`I,WPR`3G5(YP,P;
  520. XM+@!*AVX&<`!@``"@<`B^@&0"+@`@!U:`+@`"1__\1>P!,"92(`MG0"`K``2P'
  521. XMAVTRL(=F#"!3)(B?K`$T(`M@:B`K``20AW((L(%E%B!+T<<DB"1()),E0``$J
  522. XMGZP!-"`+8$@D2R938+P@!R(L`:30@5.`3KH">"(L`:1.N@)0+`!0AB`&5H`L.
  523. XM``)&__P@!DZZ_K`F0"`+9Q`@!B!+3KK\<B`'80#_6&`"<`!,WPS`3G4`````9
  524. XM``!P84CG`Q`N`$?L`3@@"V<P""L``@`;9B0(*P`!`!MG'"`K``20JP`0+`!*K
  525. XMAF<.("L`'"(&(&L`$$ZZ[Q`F4V#,(`=.NOHJ3-\(P$YU``!(YS<2+@`F2"P!;
  526. XM2JP#;&<$3KH#_D*L`U0B!R0+)@8L;`FX3J[_T"H`</^Z@&8.3J[_?"E``U1PT
  527. XM!2E`";0@!4S?2.Q.=4CG/P(N`"P!*B\`($JL`VQG!$ZZ`[A"K`-4(`53@"('O
  528. XM)`8F`"QL";A.KO^^*`!P_[B`9@Y.KO]\*4`#5'`6*4`)M"`%2H!G"E.`9PI3_
  529. XM@&<,8!@@!F`4(`30AF`.(@=T`"8"+&P)N$ZN_[Y,WT#\3G5(YS<2+@`F2"P!O
  530. XM2JP#;&<$3KH#2D*L`U0B!R0+)@8L;`FX3J[_UBH`</^Z@&8.3J[_?"E``U1P&
  531. XM!2E`";0@!4S?2.Q.=4CG`0(N`$JL`VQG!$ZZ`PHB!RQL";A.KO_<<`!,WT"`K
  532. XM3G4``$Y5_ZA(YP$20_H`B'``+'@`!$ZN_=@F0"`+9@9P%$ZZ^.1^`"!L`X0>1
  533. XM*/__(`=#[?^P8`(2V%.`9/I"-7BP0>W_L"E(`;0O"TAX`"A(>`#Z2&P!T'``<
  534. XM+P!P`"(`D<A#[`&\3KKM5'`43KKXFDSM2(#_G$Y=3G4J*B!3=&%C:R!/=F5R=
  535. XM9FQO=R`J*@``15A)5```:6YT=6ET:6]N+FQI8G)A<GD`````````<&%(YS``<
  536. XM)``F`4A"2$/$P<;`P,'40TA"0D+0@DS?``Q.=4J`:@``'D2`2H%J```,1(%A:
  537. XM```@1(%.=6$``!A$@$2!3G5*@6H```Q$@6$```9$@$YU+P)(030!9@``(DA`@
  538. XM2$%(0C0`9P``!H3!,`)(0#0`A,$P`DA",@(D'TYU+P-V$`Q!`(!D```&X9E1<
  539. XM0PQ!"`!D```&Z9E90PQ!(`!D```&Y9E50TI!:P``!N.94T,T`.:H2$)"0N:J[
  540. XM2$.`P38`,`(T`TA!Q,&0@F0```A30]"!9/YR`#(#2$/GN$A`P4$F'R0?3G5.T
  541. XM5?^82.<S,GX`(&P#A!XH__]P3[Z`;P(N`"`'0^W_KV`"$MA3@&3Z0C5XKY/)M
  542. XM+'@`!$ZN_MHF0"`K`*QG2.6`)$`L*@`X2H9F!"PK`*!*AF<T(@9!^@"T)`AVT
  543. XM"RQL";A.KO_0($=2AR`(&[P`"@BO(@9![?^O)`@F!RQL";A.KO_0</]@4$/Z,
  544. XM`(YP`"QX``1.KOW8*T#_FF8$</]@.$'M_Z\I2`($+RW_FDAX`#Q(>`#Z2&P"@
  545. XM($AL`@QP`"(`D<A#[`'X3KKK8D_O`!13@&<$</]@`G``3-],S$Y=3G4J*B!55
  546. XM<V5R($%B;W)T(%)E<75E<W1E9"`J*@``0T].5$E.544``$%"3U)4`"HJ*B!"E
  547. XM<F5A:SH@`&EN='5I=&EO;BYL:6)R87)Y`"\'+@!P`"E``U1*AVLBOJP!(&P<(
  548. XM(`?G@$'L!Z!*L`@`9PX@!^>`0>P'H-'`(`A@"'`)*4`)M'``+A].=4CG`0)P=
  549. XM`"(\```P`"QX``1.KO[.+@`"AP``,`!*AV<<2JP#;&<6(&P#;$Z02H!F`F`*0
  550. XM0JP#;'`43KKUUDS?0(!.=6&\3G4``$Y5__PO"R9((`MF!'``8!8@2TZZ]K0F&
  551. XM0"!+0^W__$ZZ]TP@+?_\)E].74YU```#[`````$````!```)$@````(````"L
  552. XM````%`````H````````#\@```^D```*-O^P#0&4`"@XO"R9(#).`````5L!$:
  553. XM`$B`2,`F7TYU"B`P,3(S-#4V-PH`)6,``%<`=P`@`"X`8@!"``H`1')A=6=H5
  554. XM=',@8GD@4G5S<V5L;"!786QL86-E("!/8W0@(#@@,3DY,`I3964@<V]U<F-EN
  555. XM(&-O9&4@9F]R(&1E=&%I;',*`$D@=VEN"@``66]U('=I;@H``$EL;&5G86P@"
  556. XM;6]V90H`O^P#0&4`"6Q(YR`0)DAP`"=```A4JP`$(BL`!'0(LH)M$E&!9@ARJ
  557. XM`2=!``1@!"=```12DTS?"`1.=;_L`T!E``DR+P<N`$J':@1P_V`*2H=O!'`!:
  558. XM8`)P`"X?3G5.5?_\O^P#0&4`"0Q(YR\0+@`L`2HO`"0H+P`H)D@@!="';11R*
  559. XM!["!;@X@!M"$;0@@!-"&L(%O!G`!8``!WB`'ZX`@2]'`(`;E@-'`(!!ACB('E
  560. XMTH7K@2!+T<$B!M*$Y8'1P2]``!@@$&$`_W0B+P`8LH!F!G`!8``!HB`%T(<OG
  561. XM0``8ZX`@2]'`(`30AN6`T<!*D&8``)8@!^N`($O1P"`&Y8#1P'`!L)!F&G('9
  562. XMLJ\`&&82)`?K@B!+T<(D!N6"T<)T`B""(@?K@2!+T<$B!N6!T<%R_[*09A@D*
  563. XM!=2'9A(D!^N"($O1PB0&Y8+1PG3^(((D!=2'ZX(@2]'")`34AN6"T<(D!^N"I
  564. XM(DO3PB0&Y8+3PB"1)`?K@B!+T<(D!N6"T<)T`"""(`)@``#R(`?0A="%;1ARE
  565. XM!["!;A(@!M"$T(1M"B`&T(30A+"!;P9P`6```,P@!]"%T(7K@"!+T<`@!M"$`
  566. XMT(3E@-'`2I!G!G`!8```K"`'ZX`@2]'`(`;E@-'`<`&PD&8<(`?0A="%7X!F!
  567. XM$B`'ZX`@2]'`(`;E@-'`<`(@@"`'ZX`@2]'`(`;E@-'`</^PD&8:(`?0A="%X
  568. XM9A(@!^N`($O1P"`&Y8#1P'#^((`@!]"%ZX`@2]'`(`;0A.6`T<!P`""`(@?2.
  569. XMA=*%ZX$@2]'!(@;2A-*$Y8'1P2('ZX$B2]/!(@;E@=/!()$B!^N!($O1P2(&T
  570. XMY8'1P2"`3-\(]$Y=3G5.5?_XO^P#0&4`!NI(YP<P)D@D22X`($LB2G`_(MA1*
  571. XMR/_\(&T`"`R0````"&T*)+R`````8``!5"!M``@L$"HH``0@!NN`($O1P"`%A
  572. XMY8#1P"`05(!G%%.`9T95@&<``(93@&<``+Y@``#J2H=G``#D(&T`""`H``CE?
  573. XM@$'L`1`O,`@`0>P!`"\P"``@!B(%($IA`/U,4$]*@&<``-I@``#`2H=G``"N+
  574. XM(&T`"`RH`````@`(;`9P`B%```@@*``(Y8!![`$0+S`(`$'L`0`O,`@`(`8B7
  575. XM!2!*80#]!E!/2H!G``"48'I*AV9J(&T`""`H``AR`;"!;EP@;0`(("@`".6`/
  576. XM0>P!$"\P"`!![`$`+S`(`"`&(@4@2F$`_,903TJ`9U1@/$J'9BP@;0`(("@`4
  577. XM".6`0>P!$"\P"`!![`$`+S`(`"`&(@4@2F$`_)903TJ`9R1@#"!M``AA`/PJ-
  578. XM8`#^QB!M``A2J``(#*@````#``AO`/[(8-X@;0`(4J@`"`RH`````P`(;P1A7
  579. XM`/OZ3-\,X$Y=3G5.50``O^P#0&4`!5A(YP$P)D@D22X`<``@;0`((4``""%`%
  580. XM``0@@"\((`<@2R)*80#^/DSM#(#_]$Y=3G5.5?[HO^P#0&4`!1Q(YP<0)D@N[
  581. XM`"P!*BT`"+ZL!YQF2G``*T#^\"M`_N@,K0````C^\&PN0JW^["`M_NQR"+"!G
  582. XM;!HB+?[PZX$@2]'!Y8#1P"`0T:W^Z%*M_NQ@W%*M_O!@R"`M_NA@``"D(`=R`
  583. XM`<"!2&W^]"!+0^W_`&$`_TA83P@'``!G1+R%;#Q![?\`80#Z@DJ`9S`@!U*`9
  584. XM+P4B!D'M_P!A`/]<6$\K0/[PL(5L`BH`2&W^]'`!($M#[?\`80#]<EA/8,`@[
  585. XM!6!"O(5L/$'M_P!A`/H^2H!G,"`'4H`O!2(&0>W_`&$`_QA83RM`_O"PAF\"8
  586. XM+`!(;?[T<``@2T/M_P!A`/TN6$]@P"`&3-\(X$Y=3G6_[`-`90`$#$CG`Q`FB
  587. XM2$AZ^@Q.N@0*6$]^`'`(OH!L``"T(`=R,-"!+P!(>OG\3KH#]%!/?`!P"+R`O
  588. XM;```B"`'ZX`@2]'`(`;E@-'`(!!4@&UL#(`````%;&300#`[``9.^P`$``@`R
  589. XM%``@`$(`3DAZ^;Q.N@.J6$]@1$AZ^;).N@.>6$]@."`'T(8(````9PQ(>OF>A
  590. XM3KH#B%A/8")(>OF43KH#?%A/8!9(>OF*3KH#<%A/8`I(>OF`3KH#9%A/4H9@)
  591. XM`/]T2'KY<DZZ`U183U*'8`#_2$AZ^6).N@-$6$],WPC`3G5.5?_<O^P#0&4``
  592. XM`R1(YS\P+@`F2$AZ^4!.N@,@6$]P`KZ`9@H@:P`$<#^P$&8&<`%@``+T(&L`*
  593. XM!$ZZ`OHI0`><0>P``$/L!IQP/R+84<C__"M\@````/_D<``L`"M`__0K0/_PM
  594. XM<`B\@&P^>@!P"+J`;#(@!NN`0>P&G")(T\`B!>6!T\$D$4J":@9T`2M"__31]
  595. XMP-'!(!!*@&\&<`$K0/_P4H5@R%*&8+Q*K?_T9@Q(>OCL3KH"AEA/8(9*K?_P$
  596. XM9@Y(>OCB3KH"=%A/8`#_=$'L!IQ#[`60<#\BV%'(__Q(;`:0<`!![`:<0^P$4
  597. XMD&$`_-Y83T'L!)!A`/@B2H!G2B\\?____W`!(BW_Y$'L!)!A`/SX6$\K0/_@Z
  598. XML*W_Y&\4*T#_Y$'L!)!#[`60<#\BV%'(__Q(;`:0<`!![`:<0^P$D&$`^OA8*
  599. XM3V"J0>P%D$/L!IQP/R+84<C__$'L!IQA`/V^0>P#D$ZZ`>!![`.0(DA*&6;\L
  600. XM4XF3R++\``1F``&<<``0+`.0+`!R,)R!<``0+`.1*@":@7``$"P#DI"!=``4U
  601. XM+`.3E(%([0`!__1([0`$__!*AFL``61R![R!;@`!7$J`:P`!5K"!;@`!4$J%4
  602. XM:P`!2KJ!;@`!1$J":P`!/K2!;@`!."(&DH!V`;*#9P92@68``2@B!9*"LH-G"
  603. XM!E*!9@`!&B(&ZX%![`:<(DC3P28%Y8/3PR@12H1J``$`ZX`B2-/`Y8+3PB@1S
  604. XM2H1K``#N(DC3P-/"2I%F/B`M__1F"B)(T\'3PW+^(H'K@")(T\`@+?_P(@#EZ
  605. XM@=/!(@;K@21(U<$D!>6"U<(BDB)(T\'3PG(`(H%@`/W>("W_]"(`DH8D+?_PC
  606. XM)@*6A2@`V(%([0`"_^Q([0`(_^AM``""<`>X@&YZ*`+8@VUT*`+8@[B`;FP@M
  607. XM+?_T*`#8@2]$`"#KA")(T\0H`MB#Y833Q$J19DY*KP`@9A(H!NN$(DC3Q"@%4
  608. XMY833Q'C^(H32@.N!(DC3P=:"Y8/3PR(&ZX$D2-7!)@7E@]7#(I+K@")(T\#EP
  609. XM@M/"<``B@-'!T<,@@&``_3I(>O:43KH`'%A/8`#^/$S?#/Q.74YU3OD```V8$
  610. XM3OD``!=\3OD```)X3OD``!":3OD``!',<&$```/L````!0````````HN```*W
  611. XM'```"B@```HB```*%@````````/R```#Z@```,\````!``````````$`````-
  612. XM`````0`````````!```````````````!``````````$``````````0``````%
  613. XM```!`````0`````````!``````````$``````````0``````````````````%
  614. XM`````````````````````````````````````````````````````````````
  615. XM`````````````````/____\`````_____P````#_____`````/__________L
  616. XM`````/____\`````_____P````#_____``````````#_____`````/____\`L
  617. XM````_____P````#_____`````0````'_______________\````!_____P``K
  618. XM``$````H``````````````````````````````%:````````````````````$
  619. XM```````````````````````!?```````````````````````````````````]
  620. XM````````````````````````````````````````````````````````@````
  621. XM``0`__\````.``X```````````````#__P````0`!````````!2V```!J/__5
  622. XM````!``$````````%,P`````__\````.``X````````6K@````#__P````0`(
  623. XM!``````````````!Y/__````!``$````````%LH`````__\````$``0`````5
  624. XM```6U```````("`@("`@("`@*"@H*"@@("`@("`@("`@("`@("`@("!($!`0*
  625. XM$!`0$!`0$!`0$!`0A(2$A(2$A(2$A!`0$!`0$!"!@8&!@8$!`0$!`0$!`0$!H
  626. XM`0$!`0$!`0$!`1`0$!`0$(*"@H*"@@("`@("`@("`@("`@("`@("`@("$!`0.
  627. XM$"`@("`@("`@("`H*"@H*"`@("`@("`@("`@("`@("`@($@0$!`0$!`0$!`0`
  628. XM$!`0$!"$A(2$A(2$A(2$$!`0$!`0$(&!@8&!@0$!`0$!`0$!`0$!`0$!`0$!_
  629. XM`0$!$!`0$!`0@H*"@H*"`@("`@("`@("`@("`@("`@("`@(0$!`0(```````W
  630. XM`@````/L````!0````````(L```"&````?````'<```!R`````0````"```"=
  631. X5"````<P```%:```!.`````````/R>
  632. X``
  633. Xend
  634. Xsize 9696
  635. END_OF_FILE
  636. if test 13612 -ne `wc -c <'draughts.uu'`; then
  637.     echo shar: \"'draughts.uu'\" unpacked with wrong size!
  638. fi
  639. # end of 'draughts.uu'
  640. fi
  641. echo shar: End of archive 1 \(of 1\).
  642. cp /dev/null ark1isdone
  643. MISSING=""
  644. for I in 1 ; do
  645.     if test ! -f ark${I}isdone ; then
  646.     MISSING="${MISSING} ${I}"
  647.     fi
  648. done
  649. if test "${MISSING}" = "" ; then
  650.     echo You have the archive.
  651.     rm -f ark[1-9]isdone
  652. else
  653.     echo You still need to unpack the following archives:
  654.     echo "        " ${MISSING}
  655. fi
  656. ##  End of shell archive.
  657. exit 0
  658. -- 
  659. Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
  660. Mail comments to the moderator at <amiga-request@uunet.uu.net>.
  661. Post requests for sources, and general discussion to comp.sys.amiga.misc.
  662.